package venta;

import java.util.HashMap;
import java.util.Map;

import org.joda.time.DateTime;

import productos.Presentacion;
/**
 * 
 * @author NazarenoCastro
 *
 */
public class Venta {

	protected Map<Presentacion, Integer> productosVendidosYCantidad;
	private DateTime fecha;
	private Double monto;

	public Venta(Map<Presentacion, Integer> productos) {

		this();
		this.productosVendidosYCantidad = productos;
		this.monto = this.calcularMonto(productos);
	}

	public Venta() {
		this.fecha = DateTime.now();
		this.monto = 0D;
		this.productosVendidosYCantidad = new HashMap<Presentacion,Integer>();
	}
	
	
	

	public void setMonto(Double monto) {
		this.monto = monto;
	}

	public void setProductosVendidos(
			Map<Presentacion, Integer> productosVendidos) {
		this.productosVendidosYCantidad = productosVendidos;
	}

	private Double calcularMonto(Map<Presentacion, Integer> productosComprados) {

		Double montoTotal = new Double(0);

		for (Map.Entry<Presentacion, Integer> entry : productosComprados
				.entrySet()) {

			montoTotal = montoTotal
					+ (entry.getKey().precioParaConsumidor() * entry.getValue());
		}

		return montoTotal;
	}

	public Map<Presentacion, Integer> productos() {

		return this.productosVendidosYCantidad;
	}

	public Double monto() {

		return this.monto;
	}

	

	public DateTime fecha() {

		return this.fecha;
	}



	public Boolean registraProducto(Presentacion producto) {
		Boolean productoPertenece = false;

		for (Presentacion presentacion_iterar : this.productosVendidosYCantidad
				.keySet()) {

			productoPertenece = productoPertenece
					|| presentacion_iterar.id() == producto.id();
		}

		return productoPertenece;
	}

	

	public Boolean corroborarDisponibilidadDeStock() {
		Boolean sePuedeResolverLaCompra = true;


			for (Map.Entry<Presentacion, Integer> entry : this.productosVendidosYCantidad
					.entrySet()) {

				sePuedeResolverLaCompra = sePuedeResolverLaCompra
						&& (entry.getKey().stockDisponible(entry.getValue()));
			}
		
		return sePuedeResolverLaCompra;
	}

	public void agregarProductos(Presentacion presentacion, Integer cant) {
		
		this.productosVendidosYCantidad.put(presentacion, cant);
		this.monto += presentacion.precioParaConsumidor() * cant;
		
	}

}
